package com.closer.server.mapper.organization;

import com.mybatisflex.core.BaseMapper;
import com.closer.server.biz.organization.entity.OrganizationMember;
import com.mybatisflex.core.query.QueryWrapper;

/**
 * 组织成员表 映射层。
 *
 * @author closer
 */
public interface OrganizationMemberMapper extends BaseMapper<OrganizationMember> {
    /**
     * 判断用户是否是组织成员
     * @param userId 用户id
     * @param organizationId 组织id
     * @return 存在返回记录，不存在返回null
     */
    default OrganizationMember existsMember(Long userId,Long organizationId){
       var  queryWrapper = new QueryWrapper()
               .eq("user_id", userId)
               .eq("organization_id", organizationId);
       return selectOneByQuery(queryWrapper);
    }

    /**
     * 获取组织成员数量
     * @param organizationId 组织id
     * @return 数量
     */
    default Long getMemberCount(Long organizationId){
        var queryWrapper = new QueryWrapper()
                .eq("organization_id", organizationId);
        return selectCountByQuery(queryWrapper);
    }

    /**
     * 获取组织成员记录
     * @param memberId 组织成员
     * @return 组织成员记录id
     */
    default Long getId(Long memberId){
        return selectOneByQuery(new QueryWrapper()
                .eq("user_id", memberId))
                .getId();
    }

    /**
     * 查询组织中最早加入的成员（创建者）
     * @param organizationId 组织ID
     * @return 最早加入的成员，不存在返回null
     */
    default OrganizationMember getEarliestMember(Long organizationId) {
        QueryWrapper queryWrapper = QueryWrapper.create()
                .select()
                .from(OrganizationMember.class)
                .where(OrganizationMember::getOrganizationId).eq(organizationId)
                .and(OrganizationMember::getIsDelete).eq(0)
                .orderBy(OrganizationMember::getJoinTime, true) // 按加入时间升序排列
                .limit(1); // 取第一条记录

        return selectOneByQuery(queryWrapper);
    }
}
